/**
 * 数据导出工具
 */

/**
 * 导出为CSV格式
 * @param {Array} data - 要导出的数据数组
 * @param {Array} columns - 列配置 [{key: 'name', label: '姓名'}, ...]
 * @param {String} filename - 文件名
 */
export function exportToCSV(data, columns, filename = 'export.csv') {
  if (!data || data.length === 0) {
    console.warn('没有数据可导出')
    return
  }

  // 构建CSV头部
  const headers = columns.map(col => col.label).join(',')
  
  // 构建CSV数据行
  const rows = data.map(item => {
    return columns.map(col => {
      let value = item[col.key]
      
      // 处理特殊值
      if (value === null || value === undefined) {
        value = ''
      } else if (typeof value === 'object') {
        value = JSON.stringify(value)
      } else {
        value = String(value)
      }
      
      // 如果值包含逗号、引号或换行符，需要用引号包围并转义
      if (value.includes(',') || value.includes('"') || value.includes('\n')) {
        value = `"${value.replace(/"/g, '""')}"`
      }
      
      return value
    }).join(',')
  })
  
  // 合并头部和数据
  const csvContent = [headers, ...rows].join('\n')
  
  // 添加BOM以支持中文
  const BOM = '\uFEFF'
  const blob = new Blob([BOM + csvContent], { type: 'text/csv;charset=utf-8;' })
  
  // 创建下载链接
  const link = document.createElement('a')
  const url = URL.createObjectURL(blob)
  link.setAttribute('href', url)
  link.setAttribute('download', filename)
  link.style.visibility = 'hidden'
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  
  // 释放URL对象
  URL.revokeObjectURL(url)
}

/**
 * 导出为Excel格式（需要xlsx库）
 * @param {Array} data - 要导出的数据数组
 * @param {Array} columns - 列配置
 * @param {String} filename - 文件名
 */
export function exportToExcel(data, columns, filename = 'export.xlsx') {
  // 这里需要安装 xlsx 库: npm install xlsx
  // import * as XLSX from 'xlsx'
  
  console.warn('Excel导出功能需要安装xlsx库: npm install xlsx')
  
  // 示例代码（需要xlsx库）:
  /*
  const worksheet = XLSX.utils.json_to_sheet(data)
  const workbook = XLSX.utils.book_new()
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
  XLSX.writeFile(workbook, filename)
  */
}

/**
 * 导出为JSON格式
 * @param {Array} data - 要导出的数据数组
 * @param {String} filename - 文件名
 */
export function exportToJSON(data, filename = 'export.json') {
  if (!data || data.length === 0) {
    console.warn('没有数据可导出')
    return
  }
  
  const jsonContent = JSON.stringify(data, null, 2)
  const blob = new Blob([jsonContent], { type: 'application/json;charset=utf-8;' })
  
  const link = document.createElement('a')
  const url = URL.createObjectURL(blob)
  link.setAttribute('href', url)
  link.setAttribute('download', filename)
  link.style.visibility = 'hidden'
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  
  URL.revokeObjectURL(url)
}

/**
 * 导出为PDF格式（需要jsPDF库）
 * @param {Array} data - 要导出的数据数组
 * @param {Array} columns - 列配置
 * @param {String} filename - 文件名
 */
export function exportToPDF(data, columns, filename = 'export.pdf') {
  // 这里需要安装 jsPDF 库: npm install jspdf
  // import jsPDF from 'jspdf'
  
  console.warn('PDF导出功能需要安装jsPDF库: npm install jspdf')
  
  // 示例代码（需要jsPDF库）:
  /*
  const doc = new jsPDF()
  const tableData = data.map(item => 
    columns.map(col => item[col.key])
  )
  
  doc.autoTable({
    head: [columns.map(col => col.label)],
    body: tableData
  })
  
  doc.save(filename)
  */
}

/**
 * 格式化导出数据
 * @param {Array} data - 原始数据
 * @param {Array} columns - 列配置
 * @returns {Array} 格式化后的数据
 */
export function formatExportData(data, columns) {
  return data.map(item => {
    const formattedItem = {}
    columns.forEach(col => {
      let value = item[col.key]
      
      // 根据列类型格式化数据
      if (col.formatter && typeof col.formatter === 'function') {
        value = col.formatter(value, item)
      } else if (col.type === 'date' && value) {
        value = new Date(value).toLocaleDateString()
      } else if (col.type === 'currency' && value) {
        value = `¥${Number(value).toFixed(2)}`
      } else if (col.type === 'number' && value) {
        value = Number(value).toFixed(2)
      }
      
      formattedItem[col.label] = value
    })
    return formattedItem
  })
}

/**
 * 获取默认的导出列配置
 * @param {String} type - 数据类型 (users, products, suppliers, customers, orders)
 * @returns {Array} 列配置
 */
export function getDefaultColumns(type) {
  const columnConfigs = {
    users: [
      { key: 'id', label: 'ID', type: 'number' },
      { key: 'username', label: '用户名' },
      { key: 'name', label: '姓名' },
      { key: 'email', label: '邮箱' },
      { key: 'phone', label: '手机号' },
      { key: 'department', label: '部门' },
      { key: 'role', label: '角色' },
      { key: 'status', label: '状态' },
      { key: 'createTime', label: '创建时间', type: 'date' }
    ],
    products: [
      { key: 'id', label: 'ID', type: 'number' },
      { key: 'code', label: '商品编码' },
      { key: 'name', label: '商品名称' },
      { key: 'category', label: '分类' },
      { key: 'specification', label: '规格' },
      { key: 'unit', label: '单位' },
      { key: 'purchasePrice', label: '采购价', type: 'currency' },
      { key: 'salePrice', label: '销售价', type: 'currency' },
      { key: 'stock', label: '库存', type: 'number' },
      { key: 'status', label: '状态' },
      { key: 'createTime', label: '创建时间', type: 'date' }
    ],
    suppliers: [
      { key: 'id', label: 'ID', type: 'number' },
      { key: 'code', label: '供应商编码' },
      { key: 'name', label: '供应商名称' },
      { key: 'contact', label: '联系人' },
      { key: 'phone', label: '联系电话' },
      { key: 'email', label: '邮箱' },
      { key: 'address', label: '地址' },
      { key: 'category', label: '供应类别' },
      { key: 'status', label: '状态' },
      { key: 'createTime', label: '创建时间', type: 'date' }
    ],
    customers: [
      { key: 'id', label: 'ID', type: 'number' },
      { key: 'code', label: '客户编码' },
      { key: 'name', label: '客户名称' },
      { key: 'type', label: '客户类型' },
      { key: 'contact', label: '联系人' },
      { key: 'phone', label: '联系电话' },
      { key: 'email', label: '邮箱' },
      { key: 'address', label: '地址' },
      { key: 'creditLimit', label: '信用额度', type: 'currency' },
      { key: 'status', label: '状态' },
      { key: 'createTime', label: '创建时间', type: 'date' }
    ],
    orders: [
      { key: 'id', label: 'ID', type: 'number' },
      { key: 'orderNo', label: '订单号' },
      { key: 'supplierName', label: '供应商/客户' },
      { key: 'totalAmount', label: '订单金额', type: 'currency' },
      { key: 'status', label: '状态' },
      { key: 'createTime', label: '创建时间', type: 'date' },
      { key: 'expectedDate', label: '预计到货/发货' }
    ]
  }
  
  return columnConfigs[type] || []
}
